<template>
  <!-- 质量处罚 -->
  <a-spin :spinning="loading">
    <title-name :title="`${$route.query.month}月质量处罚情况`"></title-name>
    <Empty v-if="!Object.keys(fineMaps) || !Object.keys(fineMaps).length" description="暂无数据" />
    <template v-else>
      <!-- 统计 -->
      <!-- <a-card class="mb20">
        本月共罚款：<a>{{ countVO.currentMonthAmount || 0 }}</a
        >元，其中劳务分包罚款：<a>{{ countVO.comAmount || 0 }}</a
        >元，项目管理人员罚款：<a>{{ countVO.personAmount || 0 }}</a
        >元。
      </a-card> -->
      <!-- 处罚列表 -->
      <div v-for="(item, index) in fineMaps" :key="index">
        <div class="branchName">{{ index }}</div>
        <a-card class="mb20">
          本月共罚款：<a>{{ item.countVO.currentMonthAmount || 0 }}</a
          >元，其中对劳务分包罚款：<a>{{ item.countVO.personAmount || 0 }}</a
          >元，对项目管理人员罚款：<a>{{ item.countVO.comAmount || 0 }}</a
          >元。
        </a-card>
        <div class="mb20">
          <a-table rowKey="id" bordered :pagination="false" :columns="columns" :dataSource="item.qualityMonthFines">
            <!-- 罚款事项 -->
            <template slot="fineDesc" slot-scope="text">
              <div v-for="(item, index) in formatList(text)" :key="index">{{ item }}</div>
            </template>
          </a-table>
        </div>
        <a-table rowKey="id" bordered :pagination="false" :columns="columns2" :dataSource="item.qualityMonthDetailFines">
            <!-- 罚款事项 -->
            <template slot="fineDesc" slot-scope="text">
              <div v-for="(item, index) in formatList(text)" :key="index">{{ item }}</div>
            </template>
          </a-table>
      </div>
    </template>
  </a-spin>
</template>

<script>
import { getFine } from '@/api/quality/qualityMonth' // api
import moment from 'moment'
import { Empty } from 'ant-design-vue' // 无数据提示


const columns = [
  {
    title: '序号',
    width: 80,
    dataIndex: 'index',
    align: 'center',
    customRender(text, record, index) {
      if (record.fineUnit === '合计') {
        return ''
      } else {
        return index + 1
      }
    }
  },
  {
    title: '下发单位',
    width: 160,
    dataIndex: 'issuingUnit',
  },
  {
    title: '时间',
    dataIndex: 'fineTime',
    width: 150,
    align: 'center',
    customRender(e) {
      return e ? moment(e).format('YYYY-MM-DD') : ''
    }
  },
  {
    title: '受罚单位',
    width: 160,
    dataIndex: 'fineUnit'
  },
  {
    title: '罚款金额（元）',
    width: 150,
    dataIndex: 'fineAmount'
  },
  {
    title: '罚款事项',
    width: 280,
    dataIndex: 'fineDesc',
    scopedSlots: { customRender: 'fineDesc' }
  },
  {
    title: '受罚目标(单位/个人)',
    width: 160,
    dataIndex: 'fineTargetName'
  }
]
const columns2 = [
  {
    title: '序号',
    width: 80,
    dataIndex: 'index',
    align: 'center',
    customRender(text, record, index) {
      if (record.fineUnit === '合计') {
        return ''
      } else {
        return index + 1
      }
    }
  },
  {
    title: '受罚单位',
    width: 160,
    dataIndex: 'fineUnit'
  },
  {
    title: '分包单位',
    children: [
      {
        title: '公司',
        align: 'center',
        dataIndex: 'coSubCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
      {
        title: '分公司',
        align: 'center',
        dataIndex: 'bcSubCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
      {
        title: '项目',
        align: 'center',
        dataIndex: 'pdSubCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
    ]
  },
  {
    title: '管理人员',
    children: [
      {
        title: '公司',
        align: 'center',
        dataIndex: 'coCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
      {
        title: '分公司',
        align: 'center',
        dataIndex: 'bcCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
      {
        title: '项目',
        align: 'center',
        dataIndex: 'pdCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
    ]
  },
  {
    title: '合计',
    children: [
      {
        title: '分包单位',
        align: 'center',
        dataIndex: 'subCount',
        customRender(text, record, index) {
          return text || '-'
        }
      },
      {
        title: '管理人员',
        align: 'center',
        dataIndex: 'count',
        customRender(text, record, index) {
          return text || '-'
        }
      },
    ]
  },
]
export default {
  name: 'QualityPenalty',
  props: {
    // 请求参数
    queryParam: {
      type: Object,
      default: () => null
    }
  },
  components:{
    Empty
  },
  data() {
    this.columns = columns
    this.columns2 = columns2
    return {
      loading: false, // 加载控件
      countVO: {}, // 统计
      fineMaps: [] // 处罚列表
    }
  },
  mounted() {
    // 初始化
    this.init()
  },
  methods: {
    /**
     * 格式化列表
     */
     formatList(text) {
      return text?.split('\n')?.filter((i) => !!i)
    },
    /**
     * 合计
     * list：需要计算的列表
     */
    account(list) {
      return list?.reduce((cur, pre) => (cur.fineAmount || cur || 0) + (pre.fineAmount || 0)) ?? 0
    },
    /**
     * 初始化
     */
    init() {
      this.loading = true
      // 请求检查情况
      getFine(this.queryParam)
        .then((res) => {
          if (res?.code === '0') {
            // 在每个列表的末尾添加合计行
            for (let idx in res.data?.fineMaps) {
              let i = res.data?.fineMaps[idx]
              i.qualityMonthFines.push({
                id: 'total',
                fineUnit: '合计',
                fineAmount: i.qualityMonthFines?.length > 1 ? this.account(i.qualityMonthFines) : i.qualityMonthFines[0].fineAmount
              })
            }
            this.countVO = res.data?.countVO || {}
            this.fineMaps = res.data?.fineMaps || []
          }
        })
        .finally(() => {
          this.loading = false
        })
    }
  }
}
</script>
